package jnpf.service;


import jnpf.base.ActionResult;
import jnpf.entity.AgentEntity;
import jnpf.model.dify.file.req.CreateDocumentReq;
import jnpf.model.dify.file.req.CreateSegmentsReq;
import jnpf.model.dify.file.req.UpdateSegmentReq;
import jnpf.model.dify.know.req.CreateDataSetsReq;
import jnpf.model.external.CreateMetadata;
import jnpf.model.external.DifyAiCreateReq;
import jnpf.model.ragFlow.common.RagFlowApiResult;
import jnpf.model.ragFlow.know.CreateKnowReq;
import jnpf.model.ragFlow.know.api.AssistantConfig;
import jnpf.model.ragFlow.know.api.AssistantConfigReq;
import jnpf.model.ragFlow.know.api.AssistantConfigResp;
import jnpf.model.ragFlow.know.api.AssistantDeleteReq;

public interface DifyKnowService {
    /**
     * 创建空知识库
     *
     * @return 服务器响应的内容字符串
     */
    String createEmptyDataset(CreateDataSetsReq createDataSetsReq) throws Exception;

    /**
     * 通过文本创建文档
     *
     * @param datasetId
     * @param createDocumentReq 创建文档的规则对象
     * @return 服务器响应的内容字符串
     */
    String createDocumentByText(String datasetId, CreateDocumentReq createDocumentReq) throws Exception;

    /**
     * 通过文件创建文档
     *
     * @param datasetId 知识库ID
     * @param fileData  文件数据（具体格式根据Dify要求，这里可按需定义类型，暂以Object表示）
     * @return 服务器响应的内容字符串
     */
    String createDocumentByFile(String datasetId, Object fileData) throws Exception;


    /**
     * 获取知识库列表
     *
     * @return 服务器响应的内容字符串
     */
    String getDatasetList() throws Exception;

    /**
     * 删除知识库
     *
     * @param datasetId 要删除的知识库ID
     * @return 服务器响应的内容字符串
     */
    String deleteDataset(String datasetId) throws Exception;

    /**
     * 通过文本更新文档
     *
     * @param datasetId   知识库ID
     * @param documentId  文档ID
     * @param requestBody 更新体
     * @return 服务器响应的内容字符串
     */
    String updateDocumentByText(String datasetId, String documentId, CreateDocumentReq requestBody) throws Exception;

    /**
     * 通过文件更新文档
     *
     * @param datasetId  知识库ID
     * @param documentId 文档ID
     * @param fileData   文件数据（具体格式根据Dify要求，这里可按需定义类型，暂以Object表示）
     * @return 服务器响应的内容字符串
     */
    String updateDocumentByFile(String datasetId, String documentId, Object fileData) throws Exception;

    /**
     * 获取文档嵌入状态（进度）
     *
     * @param datasetId 知识库ID
     * @param batch     批次相关参数（根据Dify API要求传入具体值）
     * @return 服务器响应的内容字符串
     */
    String getDocumentIndexingStatus(String datasetId, String batch) throws Exception;

    /**
     * 删除文档
     *
     * @param datasetId  知识库ID
     * @param documentId 文档ID
     * @return 服务器响应的内容字符串
     */
    String deleteDocument(String datasetId, String documentId) throws Exception;

    /**
     * 获取知识库文档列表
     *
     * @param datasetId 知识库ID
     * @return 服务器响应的内容字符串
     */
    String getDatasetDocumentList(String datasetId) throws Exception;

    /**
     * 新增分段
     *
     * @param datasetId
     * @param documentId
     * @param createSegmentsReq 分段对象
     * @return 服务器响应的内容字符串
     */
    String addDocumentSegment(String datasetId, String documentId, CreateSegmentsReq createSegmentsReq) throws Exception;

    /**
     * 查询文档分段
     *
     * @param datasetId  知识库ID
     * @param documentId 文档ID
     * @return 服务器响应的内容字符串
     */
    String queryDocumentSegment(String datasetId, String documentId) throws Exception;

    /**
     * 删除文档分段
     *
     * @param datasetId  知识库ID
     * @param documentId 文档ID
     * @param segmentId  分段ID
     * @return 服务器响应的内容字符串
     */
    String deleteDocumentSegment(String datasetId, String documentId, String segmentId) throws Exception;

    /**
     * 更新文档分段
     *
     * @param datasetId  知识库ID
     * @param documentId 文档ID
     * @param segmentId  分段ID
     * @param params
     * @return 服务器响应的内容字符串
     */
    String updateDocumentSegment(String datasetId, String documentId, String segmentId, UpdateSegmentReq params) throws Exception;

    ActionResult createDifyAi(DifyAiCreateReq difyAiCreateReq) throws Exception;


    ActionResult createMetadata(CreateMetadata CreateMetadata) throws Exception;



    ActionResult getObjRelation(String dataSetId,String ragFileId) throws Exception;

    RagFlowApiResult createDataset(CreateKnowReq createDataSetsReq) throws Exception;

    ActionResult getModelSelectList() throws Exception;


    RagFlowApiResult<AssistantConfigResp> saveAssistant(AssistantConfig assistantConfig) throws Exception;

    ActionResult updateDifyAi(DifyAiCreateReq difyAiCreateReq, String difyAi) throws Exception;


    RagFlowApiResult<AssistantConfigResp> updateAssistant(AssistantConfigReq assistantConfig) throws Exception;

    RagFlowApiResult deleteAssistant(AssistantDeleteReq assistantDeleteReq) throws Exception;

    RagFlowApiResult deleteAssistant(AgentEntity deleteId) throws Exception;


    ActionResult getKnowSelect();

}
